<?php

/**
 * Проводит аутентификацию пользователя.<br />Либо логинит зарегистрированного, либо регистрирует нового.
 * @return array Возвращает информацию о зплогиненом пользователе 
 */
function auth() {
    if (!$uid = cookie('uid')) {
        $login = post('login', '');
        $password = post('password', '');
        if ($login && $password) {
            if ($user = mysql_row_assoc("SELECT * FROM `users` WHERE `login` = '" . $login . "'")) {
                $uid = login($login, $password, $user);
            } else {
                $uid = register($login, $password);
            }
            if ($uid) {
                setcookie("uid", $uid, time() + 31449600, "/");
                redirect(BASE_URL);
            } else {
                return null;
            }
        }
    } else {
        $user = mysql_row_assoc("SELECT * FROM `users` WHERE `id` = " . $uid);
        $name = trim($user['first_name'] . " " . $user['last_name']);
        $user['name'] = $name ? $name : $user['login'];
        return $user;
    }
}

/**
 * Регистрирует нового пользователя
 * @param string $login Логин пользователя
 * @param string $password Пароль пользователя
 * @return $int Возвращает id нового пользователя 
 */
function register($login, $password, $admin = 0) {
    $login = trim($login);
    $password = trim($password);
    $datetime = date("Y-m-d H:i:s");
    $password = passhash($password, $datetime);
    $insert = array();
    $insert['login'] = $login;
    $insert['short_name'] = $login;
    $insert['password'] = $password;
    $insert['date_reg'] = $datetime;
    $insert['admin'] = $admin;
    $id = mysql_insert('users', $insert);
    setcookie("uid", $id, time() + 31449600, "/");
    return $id;
}

/**
 * Вход пользователья в систему
 * @param string $login Логин пользователя
 * @param string $password Пароль, введенный в форму входа
 * @param array $user Информация о пользователе
 * @return null 
 */
function login($login, $password, $user) {
    $login = trim($login);
    $password = trim($password);
    if (verify_pass($password, $user['password'], $user['date_reg'])) {
        setcookie("uid", $user['id'], time() + 31449600, "/");
        return $user['id'];
    } else {
        return null;
    }
}

/**
 * Выход пользователя из системы.
 */
function logout() {
    setcookie("uid", 0, time() - 31449600, "/");
}

/**
 * Генерирует хэш пароля с солью или без нее
 * @param string $pass Пароль, введенный в форму входа
 * @param string $salt Соль
 * @return string Возвращает сгенерированный хэш пароля
 */
function passhash($pass, $salt = "") {
    $pass = md5($pass);
    if ($salt) {
        $pass = md5($pass . $salt);
    }
    return $pass;
}

/**
 * Проверяет валидность пароля
 * @param string $pass Пароль, введенный в форму входа
 * @param string $hash Хэш пароля пользователя, хранящийся в базе
 * @param string $salt Соль
 * @return boolean Возвращает true если хэши совпадают, false - если не совпадают
 */
function verify_pass($pass, $hash, $salt = "") {
    $pass = passhash($pass, $salt);
    if ($pass == $hash) {
        return true;
    } else {
        return false;
    }
}

/**
 * Обновляет имя пользователя
 */
function set_name() {
    $name = array();
    $name['first_name'] = trim(post('first_name'));
    $name['last_name'] = trim(post('last_name'));
    if ($name['first_name'] && $name['last_name']) {
        $short_name = trim($name['first_name'] . " " . $name['last_name']);
        if (strlen($short_name) > 30) {
            $short_name = $name['first_name'] . " " . substr($name['last_name'], 0, 2) . ".";
        }
        $name['short_name'] = $short_name;
        mysql_update("users", $name, array("id" => post('uid')));
    }
}

